abstract factory
package destination_version.abstractfactory;
public class Car {
public void thisIsCar(Sender sender) {
System.out.println("汽车已组装完毕等待发送.");
sender.send();
}
}
package destination_version.abstractfactory;
public class CarBody {
public void who(){
System.out.println("This is car body!");
}
}
package destination_version.abstractfactory;
public class CarBone {
public void who(){
System.out.println("This is car bone!");
}
}
package destination_version.abstractfactory;
public class CarSender implements Sender{
@Override
public void send() {
System.out.println("已下流水线,汽车已发送...");
}
}
package destination_version.abstractfactory;
public class CarWheel {
public void who(){
System.out.println("This is the car wheel!");
}
}
package destination_version.abstractfactory;
public class MailSender implements Sender {
@Override
public void send() {
System.out.println("this is mailsender!");
}
}
package destination_version.abstractfactory;
//工厂概括为provider
public interface Provider {
public Sender produce();
}
package destination_version.abstractfactory;
//human being (可以看作人员)
public interface Sender {
public void send();
}
package destination_version.abstractfactory;
public class SendMailFactory implements Provider {
@Override
public Sender produce(){
return new MailSender();
}
}
package destination_version.abstractfactory;
//当作一个装置
public class SendShoesFactory implements Provider{
@Override
public Sender produce() {
return new ShoesSender();
}
}
package destination_version.abstractfactory;
public class SendSmsFactory implements Provider{
@Override
public Sender produce() {
return new SmsSender();
}
}
package destination_version.abstractfactory;
public class ShoesSender implements Sender{
@Override
public void send(){
System.out.println("This is a sender of ShoesSender~");
}
}
package destination_version.abstractfactory;
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("this is sms sender!");
}
}
package destination_version.abstractfactory;
/**
* ��������Բ��ͣ�http://blog.csdn.net/zhangerqing
* email:xtfggef@gmail.com
* ����http://weibo.com/xtfggef
*
* @author egg
*/
public class Test {
public static void main(String[] args) {
Provider emailProvider = new SendMailFactory();
Sender sender = emailProvider.produce();
sender.send();
Provider smsProvider = new SendSmsFactory();
smsProvider.produce().send();
Provider sendShoesProdiver = new SendShoesFactory();
sendShoesProdiver.produce().send();
//
BuildCarFactory buildCarFactory = new BuildCarFactory();
Car car718 = buildCarFactory.buildCarOK(
buildCarFactory.buildBody(),
buildCarFactory.buildBone(),
buildCarFactory.buildWheel()
);
Sender produce = buildCarFactory.produce();
car718.thisIsCar(produce);
}
}
adpter
package destination_version.adpter;
public class Source {
public void method1() {
System.out.println("this is original method1!");
}
}
package destination_version.adpter;
public interface Sourceable {
public void method1();
public void method2();
}
package destination_version.adpter;
public class SourceSub1 extends Wrapper2 {
public void method1(){
System.out.println("the sourceable interface's first Sub1!");
}
}
package destination_version.adpter;
public class SourceSub2 extends Wrapper2 {
public void method2(){
System.out.println("the sourceable interface's second Sub2!");
}
}
package destination_version.adpter;
//插排的接口
public interface Strip {
public void who();
public int turnOn();
public int turnOff();
}
package destination_version.adpter;
public interface Targetable {
/* ��ԭ���еķ�����ͬ */
public void method1();
/* ����ķ��� */
public void method2();
}
package destination_version.adpter;
public class Wrapper implements Targetable {
private Source source;
public Wrapper(Source source){
super();
this.source = source;
}
@Override
public void method2() {
System.out.println("this is the targetable method2!");
}
@Override
public void method1() {
source.method1();
}
}
package destination_version.adpter;
public abstract class Wrapper2 implements Sourceable{
public void method1(){}
public void method2(){}
}
package destination_version.adpter;
public class WrapperTest {
public static void main(String[] args) {
Sourceable source1 = new SourceSub1();
Sourceable source2 = new SourceSub2();
source1.method1();
source1.method2();
source2.method1();
source2.method2();
}
}
package destination_version.adpter;
//家庭用电
public class HomePower implements Power{
private double electricFee; //money 200
private String powerType = null; //电源类型
@Override
public void who() {
System.out.println("我是家庭用电!");
}
@Override
public boolean isPowerOn(double electricFee) {
this.electricFee += electricFee;
if(this.electricFee>=0){
return true;
}
return false;
}
@Override
public boolean isPowerOn() {
if(this.electricFee>=0){
return true;
}
return false;
}
@Override
public double voltage() {
return 200;
}
@Override
public void setPowerType(String powerType) {
this.powerType = powerType;
}
@Override
public String getPowerType() {
return powerType;
}
}
package destination_version.adpter;
public class IPhone5Plug implements Plug{
@Override
public void who(){
System.out.println("I am the IPhone5's plug.");
}
@Override
public int useForPlugsSize() {
return 2;
}
}
bridge
package destination_version.bridge;
public abstract class Bridge {
private Sourceable source;
public void method(){
source.method();
}
public Sourceable getSource() {
return source;
}
public void setSource(Sourceable source) {
this.source = source;
}
}
package destination_version.bridge;
public interface Sourceable {
public void method();
}
package destination_version.bridge;
public class MyBridge extends Bridge {
public void method(){
getSource().method();
}
}
package destination_version.bridge;
public class SourceSub1 implements Sourceable {
@Override
public void method() {
System.out.println("this is the first sub!");
}
}
package destination_version.bridge;
public class SourceSub2 implements Sourceable {
@Override
public void method() {
System.out.println("this is the second sub!");
}
}
package destination_version.bridge;
/**
* ��������Բ��ͣ�http://blog.csdn.net/zhangerqing
* email:xtfggef@gmail.com
* ����http://weibo.com/xtfggef
* @author egg
*
*/
package destination_version.bridge;
public class BridgeTest {
public static void main(String[] args) {
/*
mybridge继承自bridge
bridge含有source对象,有get,set,有调用source.method的method
*/
Bridge bridge = new MyBridge();
/*
子source1实现了sourceable接口,sourceable接口只有method
bridge设置source源为source1并调用method
实际调用了source1中的method
source1中的method是已实现父类sourceable method的method实现
*/
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();
/*
如source1,这里设置source2即调用source2实现后的method
*/
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}
builder
package destination_version.builder;
import java.util.ArrayList;
import java.util.List;
public class Builder {
private List<Sender> list = new ArrayList<Sender>();
public void produceMailSender(int count){
for(int i=0; i<count; i++){
list.add(new MailSender());
}
}
public void produceSmsSender(int count){
for(int i=0; i<count; i++){
list.add(new SmsSender());
}
}
}
package destination_version.builder;
public interface Sender {
public void Send();
}
package destination_version.builder;
public class MailSender implements Sender {
@Override
public void Send() {
System.out.println("this is mailsender!");
}
}
package destination_version.builder;
public class SmsSender implements Sender {
//test中new SmsSender,并没有调用Send() 构造器可以print
@Override
public void Send() {
System.out.println("this is sms sender!");
}
}
package destination_version.builder;
public class Test {
public static void main(String[] args) {
//builder建造者
Builder builder = new Builder();
//发送10个MailSender
builder.produceMailSender(10);
}
}