zoukankan      html  css  js  c++  java
  • 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);
    	}
    }
    
    
  • 相关阅读:
    程序打印的日志哪里去了?结合slf4j来谈谈面向接口编程的重要性
    vue项目用npm安装sass包遇到的问题及解决办法
    nginx反向代理配置及常见指令
    你以为你以为的就是你以为的吗?记一次服务器点对点通知的联调过程
    jeecg逆向工程代码的生成及常见问题
    java注解
    终于有了,史上最强大的数据脱敏处理算法
    SpringBoot项目下的JUnit测试
    递归方法
    练习题
  • 原文地址:https://www.cnblogs.com/ukzq/p/13324277.html
Copyright © 2011-2022 走看看