Java——设计模式(简单工厂模式)
生活随笔
收集整理的這篇文章主要介紹了
Java——设计模式(简单工厂模式)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
* A:簡(jiǎn)單工廠模式概述* 簡(jiǎn)單工廠模式又叫靜態(tài)工廠方法模式,它定義了一個(gè)具體的工廠類(lèi)負(fù)責(zé)創(chuàng)建一些類(lèi)的實(shí)例* B:優(yōu)點(diǎn)* 客戶端不需要再負(fù)責(zé)對(duì)象的創(chuàng)建,從而明確了各個(gè)類(lèi)的職責(zé)* 簡(jiǎn)單來(lái)說(shuō),客戶端你只需要用就可以了,就不用創(chuàng)建了,工廠來(lái)創(chuàng)建就可以了* C:缺點(diǎn)* 這個(gè)靜態(tài)工廠類(lèi)負(fù)責(zé)所有對(duì)象的創(chuàng)建,如果有新的對(duì)象增加,或者某些對(duì)象的創(chuàng)建方式不同,就需要不斷地修改工廠類(lèi),不利于后期的維護(hù)* 也就是說(shuō):你得需要不斷地去修改你的源碼,是不利于后期的維護(hù)的* D:案例演示* 動(dòng)物抽象類(lèi):public abstract Animal(public abstract void eat();)* 具體狗類(lèi):public class Dog extends Animal{}* 具體貓類(lèi):public class Cat extends Animal{}* 開(kāi)始:在測(cè)試類(lèi)中每個(gè)具體的內(nèi)容自己創(chuàng)建對(duì)象,但是,創(chuàng)建對(duì)象的工作如果比較麻煩,就需要有人專(zhuān)門(mén)做這個(gè)事情,所以就制造了一個(gè)專(zhuān)門(mén)的類(lèi)來(lái)創(chuàng)建對(duì)象* * 例如:本來(lái)我們創(chuàng)建對(duì)象需要自己去創(chuàng)建,比如說(shuō),你需要一只狗,自己就創(chuàng)建一個(gè),而簡(jiǎn)單工廠認(rèn)為,對(duì)于這件事就不勞費(fèi)客戶了,創(chuàng)建狗對(duì)象或者是貓對(duì)象,交個(gè)簡(jiǎn)單工廠去創(chuàng)建就可以了* 要狗,簡(jiǎn)單工廠就會(huì)給客戶提供狗,要貓,簡(jiǎn)單工廠就會(huì)給顧客提供貓;所以,現(xiàn)在我們就要做一個(gè)工廠,這個(gè)工廠就是用來(lái)生產(chǎn)狗,或者貓的;* 首先,要?jiǎng)?chuàng)建工廠得有Animal、Dog、Cat這些類(lèi)
package com.yy.簡(jiǎn)單工廠;public abstract class Animal { //創(chuàng)建一個(gè)動(dòng)物抽象類(lèi),在這個(gè)Animal抽象類(lèi)里面有個(gè) 吃 的方法public abstract void eat();}
package com.yy.簡(jiǎn)單工廠;public class Dog extends Animal { //創(chuàng)建一個(gè)狗類(lèi),讓Dog類(lèi)去繼承Animal這個(gè)抽象類(lèi)public void eat(){ //并且去重寫(xiě)Animal里面的的eat這個(gè)抽象方法System.out.println("狗吃肉"); //然后輸出一句話:狗吃肉}}
package com.yy.簡(jiǎn)單工廠;public class Cat extends Animal { //創(chuàng)建一個(gè)貓類(lèi),讓Cat類(lèi)去繼承Animal這個(gè)抽象類(lèi)public void eat() { //并且去重寫(xiě)Animal里面的的eat這個(gè)抽象方法System.out.println("貓吃魚(yú)"); //然后輸出一句話:狗吃肉}}
package com.yy.簡(jiǎn)單工廠;public class AnimalFactory { //創(chuàng)建一個(gè)動(dòng)物工廠,目的是為了生產(chǎn)動(dòng)物,可以生產(chǎn)狗,也可以生產(chǎn)貓,需要啥就創(chuàng)建啥對(duì)象即可/*public static Dog createDog(){ //該方法用來(lái)創(chuàng)建狗return new Dog(); //返回一個(gè)狗}public static Cat createCat(){ //該方法用來(lái)創(chuàng)建貓return new Cat(); //返回一個(gè)貓}*///我們發(fā)現(xiàn),如果動(dòng)物太多的話,必須得定義很多個(gè)方法,復(fù)用性太差//改進(jìn)public static Animal createAnimal(String name){ //返回類(lèi)型為Animal,參數(shù)為一個(gè) 名字if("dog".equals(name)){ //如果傳入的是一只狗的話,就對(duì)參數(shù)進(jìn)行判斷return new Dog(); //參數(shù)是狗,就返回一個(gè)狗}else if("cat".equals(name)){ //如果傳入的是一只貓的話,就對(duì)參數(shù)進(jìn)行判斷return new Cat(); //參數(shù)是貓,就返回一個(gè)狗}else { //如果傳入的是既不是狗又不是貓的話return null; //就返回一個(gè)null}//如果在有一個(gè)其他的類(lèi),就會(huì)返回null,一返回null,Test這個(gè)類(lèi)就會(huì)進(jìn)行,null就開(kāi)始調(diào)用eat這個(gè)方法,然后就會(huì)出現(xiàn)空指針異常,這個(gè)就是簡(jiǎn)單工廠模式的弊端所在}}
package com.yy.簡(jiǎn)單工廠;public class Test { //做一個(gè)測(cè)試類(lèi)public static void main(String[] args) {/*Dog yy = AnimalFactory.createDog(); //想要一只狗,運(yùn)用 類(lèi)名. 來(lái)調(diào)用System.out.println(yy);*/ //打印 狗 ,這里沒(méi)有重寫(xiě)toString方法,所以返回為類(lèi)名+@+HashCode16進(jìn)制Dog d = (Dog) AnimalFactory.createAnimal("dog"); //通過(guò) 類(lèi)名. 來(lái)調(diào)用,由于 AnimalFactory.createAnimal該方法返回的是Animal,而我們通過(guò)Dog接收,所以這時(shí)要進(jìn)行強(qiáng)轉(zhuǎn),由Animal類(lèi)型強(qiáng)制轉(zhuǎn)換為Dog類(lèi)型d.eat(); //類(lèi)名.方法 調(diào)用Dog類(lèi)里面的eat方法//輸出結(jié)果:狗吃肉Cat c = (Cat) AnimalFactory.createAnimal("cat");c.eat();//輸出結(jié)果:貓吃魚(yú)}}
總結(jié)
以上是生活随笔為你收集整理的Java——设计模式(简单工厂模式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信阳治子宫内膜异位症最好的医院推荐
- 下一篇: xgiminewplay投影仪无法聚焦