• 设计模式笔记--工厂


    简单工厂

    简单工厂是一个工厂可以生产各种产品,用户只需要得到这个工厂就可获得需要的产品

    优点:对用户友好

    缺点:工厂分工不明确导致逻辑复杂

    └── simple
        ├── SimpleFactory.java
        └── SimpleFactoryTest.java
    
    
    package com.xh.pattern.factory.simple;
    
    /**
     * Created by root on 3/15/18.
     */
    public class SimpleFactory {
    
        public void produceComputer(String computerBrands) {
            switch (computerBrands) {
                case "apple":
                    System.out.println("MAC COMPUTER");
                    break;
                case "thinkpad":
                    System.out.println("thinkpad COMPUTER");
                    break;
                case "asus":
                    System.out.println("asus COMPUTER");
                    break;
                default:
                    System.out.println("生产不了");
            }
        }
    }
    
    
    package com.xh.pattern.factory.simple;
    
    /**
     * Created by root on 3/15/18.
     */
    public class SimpleFactoryTest {
        public static void main(String[] args) {
            SimpleFactory simpleFactory = new SimpleFactory();
            simpleFactory.produceComputer("asus");
        }
    }
    

    工厂方法

    工厂方法是为了弥补简单工厂的分工不明改进的

    优点:工厂分工明确,逻辑简单

    缺点:用户需要找到对应的工厂才能获得产品,对用户不友好

    ├── function
    │   ├── AppleFactory.java
    │   ├── AsusFactory.java
    │   ├── Factory.java
    │   ├── FuncFactoryTest.java
    │   └── ThinkPadFactory.java
    
    package com.xh.pattern.factory.function;
    
    /**
     * Created by root on 3/15/18.
     */
    public interface Factory {
        void produceComputer();
    }
    
    package com.xh.pattern.factory.function;
    
    /**
     * Created by root on 3/15/18.
     */
    public class AppleFactory implements Factory {
        @Override
        public void produceComputer() {
            System.out.println("MAC COMPUTER");
        }
    }
    
    package com.xh.pattern.factory.function;
    
    /**
     * Created by root on 3/15/18.
     */
    public class AsusFactory implements Factory {
        @Override
        public void produceComputer() {
            System.out.println("asus COMPUTER");
        }
    }
    
    package com.xh.pattern.factory.function;
    
    /**
     * Created by root on 3/15/18.
     */
    public class ThinkPadFactory implements Factory {
        @Override
        public void produceComputer() {
            System.out.println("thinkpad COMPUTER");
        }
    }
    
    package com.xh.pattern.factory.function;
    
    /**
     * Created by root on 3/15/18.
     */
    public class FuncFactoryTest {
        public static void main(String[] args) {
            Factory factory=new AppleFactory();
            factory.produceComputer();
        }
    }
    

    抽象工厂

    抽象工厂是为了弥补工厂方法的对用户不友好改进的

    优点:工厂分工明确,逻辑简单,对用户友好

    缺点:???

    ├── abstr
    │   ├── AppleFactory.java
    │   ├── AsusFactory.java
    │   ├── DefaultFactory.java
    │   ├── Factory.java
    │   ├── FuncFactoryTest.java
    │   └── ThinkPadFactory.java
    
    
    package com.xh.pattern.factory.abstr;
    
    /**
     * Created by root on 3/15/18.
     */
    public abstract class Factory {
        abstract void produceComputer();
    
        public void produceComputer(String computerBrands) {
            switch (computerBrands) {
                case "apple":
                    new AppleFactory().produceComputer();
                    break;
                case "thinkpad":
                    new ThinkPadFactory().produceComputer();
                    break;
                case "asus":
                    new AsusFactory().produceComputer();
                    break;
                default:
                    System.out.println("生产不了");
            }
        }
    }
    
    package com.xh.pattern.factory.abstr;
    
    /**
     * Created by root on 3/15/18.
     */
    public class AppleFactory extends Factory {
        @Override
        public void produceComputer() {
            System.out.println("MAC COMPUTER");
        }
    }
    

    ...

    package com.xh.pattern.factory.abstr;
    
    /**
     * Created by root on 3/15/18.
     */
    public class DefaultFactory extends Factory {
        @Override
        void produceComputer() {
            new AppleFactory().produceComputer();
        }
    }
    
    package com.xh.pattern.factory.abstr;
    
    /**
     * Created by root on 3/15/18.
     */
    public class FuncFactoryTest {
        public static void main(String[] args) {
            DefaultFactory factory = new DefaultFactory();
            factory.produceComputer();
            factory.produceComputer("asus");
        }
    }
    
  • 相关阅读:
    设计模式
    mysql引擎与物理文件
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'socialCode' in 'class java.lang.String'
    bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
    jedis异常Broken pipe (Write failed)
    java第三方工具包
    mysql安装(centos7)
    sftp安装(linux)
    Snmp oid对应信息
    RAID
  • 原文地址:https://www.cnblogs.com/lanqie/p/8572684.html
Copyright © 2020-2023  润新知