• 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);
    	}
    }
    
    
  • 相关阅读:
    更改EBSserver域名/IP
    iOS Dev (60) 怎样实现 UITextView 中的 placeHolder
    程序猿的量化交易之路(29)--Cointrader之Tick实体(16)
    美团面试中被问到的问题汇总
    汇报措辞:你懂得如何向领导汇报吗(审阅、审批、审阅、批示、查阅)?
    九月份总结
    Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1
    OLE操作Excel编译错误处理
    在 VS2008 下操作 Excel 的方法总结
    vs2008 ole excel
  • 原文地址:https://www.cnblogs.com/ukzq/p/13324277.html
Copyright © 2020-2023  润新知