美文网首页
设计模式之工厂和建造

设计模式之工厂和建造

作者: xbmchina | 来源:发表于2018-12-18 23:01 被阅读0次

    1. 工厂模式

    抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

    public interface Sender {
        public void send();
    }
    
    public interface Provider {
        public Sender produce();
    }
    
    
    public class MailSender implements Sender {
        @Override
        public void send() {
            System.out.println("this is mail");
        }
    }
    
    
    public class WeixinSender implements Sender {
        @Override
        public void send() {
            System.out.println("this is weixin sender");
        }
    }
    
    public class SendMailFactory implements Provider {
        @Override
        public Sender produce() {
            return new MailSender();
        }
    }
    
    public class SendWeixinFactory implements Provider {
        @Override
        public Sender produce() {
            return new WeixinSender();
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            Provider provider = new SendWeixinFactory();
            Sender sender = provider.produce();
            sender.send();
        }
    }
    
    

    2. 建造者模式

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。

    建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。

    /**
     * 工作过程
     */
    public abstract class Builder {
    
        public abstract void openEye();
    
        public abstract void eatFood();
    
        public abstract void doWork();
    }
    
    /**
     *打工仔
     */
    public class ConcreteBuilder extends Builder {
        Person worker = new Person();
        @Override
        public void openEye() {
            worker.Add("睁开眼");
        }
    
        @Override
        public void eatFood() {
            worker.Add("吃饭");
        }
    
        @Override
        public void doWork() {
            worker.Add("敲代码");
        }
    
    
        public Person getWorker() {
            return worker;
        }
    }
    
    
    /**
     * 包工头
     */
    public class Director {
    
        public void construct(Builder builder){
            builder.openEye();
            builder.eatFood();
            builder.doWork();
        }
    }
    
    
    /**
     * 干活的人,就是你(其中的一个打工仔)
     */
    public class Person {
    
        //日常生活流程
        private List<String> parts = new ArrayList<String>();
    
        //记录每天日常
        public void Add(String part){
            parts.add(part);
        }
    
        public void Show(){
            for (int i = 0;i<parts.size();i++){
                System.out.println("开始了"+parts.get(i));
            }
            System.out.println("sleep,good night");
    
    
        }
    }
    
    
    public class Test {
    
        public static void main(String[] args) {
            Director director = new Director();
            Builder builder = new ConcreteBuilder();
    
            director.construct(builder);
    
            Person person = ((ConcreteBuilder) builder).getWorker();
            person.Show();
        }
    }
    

    相关文章

      网友评论

          本文标题:设计模式之工厂和建造

          本文链接:https://www.haomeiwen.com/subject/cghboftx.html