zoukankan      html  css  js  c++  java
  • [一天一个设计模式]-[工厂模式]

    简单工厂模式
    简单工厂模式就是把创建对象实例的工作全部交给工厂类,使用方只需要知道自己需要的类的类型。
    

    举个栗子,养宠物,有的人喜欢猫有的人喜欢狗。

    public interface Pet{
        void say();
    }
    
    public class Cat implements Pet{
        
        @Override
        public void say(){
            System.out.println("I'm cat.");
        } 
    }
    
    
    public class Dog implements Pet{
        
        @Override
        public void say(){
            System.out.println("I'm dog.");
        } 
    }
    

    下面我们来创建一个宠物工厂,使用方只需要知道自己想要什么类型即可。

    public class PetFactory{
        
        public static Pet createPet(int type){
            if(type==0){
                return new Cat();
            }else if(type == 1){
                return new Dog();
            }else{
                return null;
            }
        }
    }
    
    工厂方法模式
    当需要创建的实例子类越来越多,简单工厂就会非常臃肿,工厂方法模式把实例的创建放到子工厂中解决了这个问题。
    

    举个栗子,养宠物的人还有喜欢鸟,羊的。。。

    public class Bird implements Pet{
        
        @Override
        public void say(){
            System.out.println("I'm bird.");
        } 
    }
    
    
    public class Sheep implements Pet{
        
        @Override
        public void say(){
            System.out.println("I'm sheep.");
        } 
    }
    
    
    public interface IPetFactory{
        Pet createPet();
    }
    
    
    public class BirdFactory implements IPetFactory{
        
        @Override
        public Pet createPet(){
            return new Bird();
        } 
    }
    
    
    public class SheepFactory implements IPetFactory{
        
        @Override
        public Pet createPet(){
            return new Sheep();
        } 
    }
    

    调用者只需要实例化需要的工厂即可。

    //调用者
    main(){
        
        IPetFactory f=new SheepFactory();
        Pet sheep=f.createPet();
        
    }
    
    
    抽象工厂模式
    抽象工厂模式就像是前面两种模式的组合,简单工厂是一个工厂类创建所有实例,工厂方法是一类工厂类创建一类实例,抽象工厂模式是一个工厂类可以创建多类实例。
    

    举个栗子,有人不喜欢宠物但是喜欢手机,

    public interface Phone{
        void fun();
    }
    
    
    public class IPhone implements Phone{
        
        @Override
        public void fun(){
            sout("I'm iPhone");
        }
    }
    
    
    public class OnePlus implements Phone {
        
        @Override
        public void fun(){
            sout("I'm OnePlus");
        }
    }
    
    public interface Factory{
        Pet createPet();
        Phone createPhone(int type);
    }
    
    public class SheepPhoneFactory implements Factory {
        
        @Override
        public Pet createPet(){
            return new Sheep();
        }
        
        @Override
        public Phone createPhone(int type){
            if(type == 0 ){
                return new IPone();
            }else{
                return new OnePlus()
            }
        }
    }
    
    
  • 相关阅读:
    Spring---------ThreadLocal(线程变量副本)
    Spring----Spring的IoC容器
    Spring----IoC Service Provieder
    三种依赖注入的方式
    数据库并发操作可能出现的问题之---更新丢失
    有状态bean与无状态bean
    Spring Data JPA、 MyBatis与Hibernate简单对比
    spring-bean的生命周期
    TCP/IP详解--拥塞控制 & 慢开始、拥塞避免、快重传和快恢复。
    如何在云服务器创建maven私有仓库
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026942.html
Copyright © 2011-2022 走看看