design pattern

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);
	}
}

原文地址:https://www.cnblogs.com/ukzq/p/13324277.html