簡單工廠模式簡單實例

簡單工廠模式簡單實例


最近在看設計模式,那麼簡單工廠模式是什麼呢?
簡單的例子來記錄下吧:
首先來兩個例子來簡單的說明吧:java

1.第一個例子

簡單的假設,咱們如今須要建立不少的實例,而且這些實例是有必定共性的。
簡單例子:如今咱們須要建立一個關於usb的設備,只要支持usb的設備咱們都須要將其建立出來,好比手機,電腦,相機不少不少種不一樣的設備,他們有一些共性(屬於電子產品,支持usb接口等)那麼咱們建立這些產品的實例的時候咱們會怎麼建立呢?設計模式

通常建立方法

public static void main(String [] args){
        //建立電腦實例
        Computer comp = new Computer();
        //建立手機實例
        Phone p = new Phone();
        //建立打印機實例
        Printer prin = new Printer();
        //建立鼠標實例
        Mouse mouse = new Mouse();

    }

在咱們建立的過程當中就會感受很是的臃腫,固然簡單工廠的設計模式並非僅僅只是解決這麼一個很是小的問題。iphone

咱們細細的想,這些產品它是有不少共性的,可是有些東西使他們特有的,那麼咱們能夠怎麼作?ide

這裏咱們就須要將這些具備共性的東西抽離出來造成一個父類(固然是要用到面向對象的思想的)學習

這樣作的好處?this

  1. 對於用戶來講:如今有一個例子,咱們如今有一個工廠(一個製造電子產品的工廠),他可以給咱們製造出支出usb的設備,那麼做爲一個客戶咱們不須要去知道工廠具體怎麼去操做,咱們只要有需求就能夠向工廠提交咱們須要製造的產品就能夠。
  2. 對於工廠來講:咱們須要的是知足客戶的需求製造出產品,那麼工廠有很是多的生產線,咱們須要將每個生產線可以生產什麼東西羅列出來,而後分類,可是他們都有支持usb產品的屬性,那麼就讓這些繼承產品這個類,做爲子類。(這樣咱們某一條生產線發生了改變,好比iphone6上市後,後面產品的迭代須要更新iphone7,那麼咱們只須要更改一個產品線就能夠,其餘的全部東西均可以不須要改變)

那麼下面就是簡單的代碼筆記:設計

下面這個例子:一個工廠生產出支持usb的電子產品,那麼有電腦和鼠標,簡單的例子code

運用簡單工廠設計模式(這個是工廠方法,負責對產品進行實例化)
/**
 * 這是簡單工廠模式的工廠類,主要是用來建立其餘電子產品的實例的
 * @author lijunhong
 *
 */
public class ElectronFactory {
    USBElectron device = null;//這個是設備
    
    public  USBElectron creatDevice(String name){
        switch (name) {
        case "computer":
            device = new Computer(name);
            break;
        case "mouse":
            device = new Mouse(name);
            break;
        default:
            break;
        }
        return device;
    }
    
}
這個抽象類將產品中的功能抽象出來,每一個產品都有相應的功能
/**
 * 這是一個父類,將支持usb中的設備抽象出來
 * @author lijunhong
 *
 */
public abstract class USBElectron {
    
    public abstract void function();//抽象出設備的功能
}
電腦類,繼承自上面的父類,而且實現了產品的功能
public class Computer extends USBElectron {
    private String name;
    
    public Computer(String name){
        this.name = name;
    }
    

    public void function() {
        //這個方法是電腦的方法
        System.out.println(this.name+":電腦能夠上網,聊天,學習");
    }

}
鼠標類:
public class Mouse extends USBElectron {
    private String name;
    public Mouse(String name){
        this.name = name;
    }
    
    @Override
    public void function() {
        //這個是鼠標的方法
        System.out.println(this.name+":鼠標能夠打字");
    }

}

上面這幾個類簡單的構成了簡單工廠模式;
那麼如今開始運用這個簡單工廠模式生產產品對象

當一個客戶須要生產產品好比:一臺電腦或者一個鼠標亦或者其餘東西咱們均可以運用blog

客戶端程序
public class FactoryMain {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        //簡單工廠建立實例演示
        //建立工廠
        ElectronFactory factory = new ElectronFactory();
        //建立電腦實例
        USBElectron computer = factory.creatDevice("computer");
        computer.function();
        //建立鼠標實例
        USBElectron mouse = factory.creatDevice("mouse");
        mouse.function();
    }

}

2.第二個例子

例子:如今咱們須要作一個遊戲,這個遊戲中有不少怪物,不一樣種類的怪物,咱們根據遊戲的進展須要去除案件不一樣的怪物。(妖猴,狐狸精,狸貓,吸血鬼等)

下面就是離子的實現過程:

怪物的父類(Monster)
//這是一個怪物的抽象類(父類)
public abstract class Monster {
    
    public abstract void skill();//怪物技能
    
    public abstract void getName();//怪物名字
    
    public abstract void eat();//怪物吃東西
}
猴子的實現類(Monkey)
public class Monkey extends Monster {

        public Monkey(){
            
        }
        
        @Override
        public void skill() {
            System.out.println("猴子會使用金箍棒。");
        }
    
        @Override
        public void getName() {
            System.out.println("猴子");
        }
    
        @Override
        public void eat() {
            System.out.println("猴子吃桃子");
        }
    
        public void life(){
            System.out.println("猴子長身不老");
        }

}
狸貓的實現類(Tanuki)
public class Tanuki extends Monster {

            public Tanuki(){
                
            }
            
            @Override
            public void skill() {
                System.out.println("狸貓的魅惑技能");
            }
        
            @Override
            public void getName() {
                System.out.println("狸貓");
            }
        
            @Override
            public void eat() {
                System.out.println("狸貓吃太子");
            }
    
}
吸血鬼的實現類(Vampire)
public class Vampire extends Monster {

            public Vampire(){
                
            }
            
            @Override
            public void skill() {
                System.out.println("吸血鬼吸血");
            }
        
            @Override
            public void getName() {
                System.out.println("吸血鬼");
            }
        
            @Override
            public void eat() {
                System.out.println("吸血鬼吸血");
            }

}
客戶端
public class MonsterMain {

        public static MonsterFactory monsterfactory;//工廠
        public static Monster monster;
        
        public static void main(String[] args) {
            
            //建立猴子實體對象
            //建立喜歡血鬼
            monster = MonsterFactory.creatMonster("吸血鬼");
            monster.eat();
            monster.getName();
            monster.skill();
            
            //建立狸貓
            monster = monsterfactory.creatMonster("狸貓");
            monster.eat();
            monster.getName();
            monster.skill();
            
            
            //這裏轉型,從而能夠調用life方法
            Monkey monster = (Monkey)monsterfactory.creatMonster("猴子");
            monster.eat();
            monster.skill();
            monster.getName();
            monster.life();
        
    }

}
運行結果以下

記錄學習的每一步,記錄每一次的成長!!!!

相關文章
相關標籤/搜索