java設計モードの工場モード(2)
3748 ワード
工場モード:作成モードに属します。私たちの生活の中のメーカーと似ています。私たちは自分で製品を作るのではなく、メーカーによって製造しています。簡単に言えば工場を作ることです。 私たちのニーズに合わせてnewのオブジェクトをください。 工場モデルはまた工場の方法モードと抽象工場のモードに分けられます。 工場の方法のモードはまた分けます:普通の工場の方法、静的な工場の方法。
package com.pattern.build.facotry.simple;
/**
*
* @author chuer
* @date 2014-7-24 6:15:44
* @version V1.0
*/
public interface Fruit {
public void name(); //
}
package com.pattern.build.facotry.simple;
/**
*
* @author chuer
* @date 2014-7-24 6:16:08
* @version V1.0
*/
public class Apple implements Fruit {
@Override
public void name() {
System.out.println("apple");
}
}
package com.pattern.build.facotry.simple;
/**
*
* @author chuer
* @date 2014-7-24 6:16:19
* @version V1.0
*/
public class Orange implements Fruit {
@Override
public void name() {
System.out.println("orange");
}
}
package com.pattern.build.facotry.simple;
public class FruitFactory {// ( )
private FruitFactory(){}
private static FruitFactory factory = new FruitFactory();
public static FruitFactory getInstance(){
return factory;
}
// :
/**
*
* @param name
* @return
*/
public Fruit createFruit(String name){
Fruit fruit = null;
if(name.equals("apple")){
fruit = new Apple();
}else if(name.equals("orange")){
fruit = new Orange();
}
return fruit;
}
/**
*
* @return
*/
public Fruit createApple(){
return new Apple();
}
/**
*
* @return
*/
public Fruit createOrange(){
return new Orange();
}
//---------------------------- -----------------------------------
//
public static Fruit create_fruit(String name){
Fruit fruit = null;
if(name.equals("apple")){
fruit = new Apple();
}else if(name.equals("orange")){
fruit = new Orange();
}
return fruit;
}
/**
*
* @return
*/
public static Fruit create_apple(){
return new Apple();
}
/**
*
* @return
*/
public static Fruit create_orange(){
return new Orange();
}
}
package com.pattern.build.facotry.simple;
public class Client {
public static void main(String[] args) {
Fruit fruit = FruitFactory.getInstance().createFruit("apple");
fruit.name();
fruit = FruitFactory.getInstance().createFruit("orange");
fruit.name();
}
}
コードを通して、各工場の方法パターンには二つの書き方があります。その中の一つは私達が一つの標識を伝えて、そのような製品を作ることを確定します。もう一つは必要ではありません。 つまり一つは一つの方法であり、一つは複数の方法である。 長所は簡単で使いやすいことです。しかし、同じ長所も欠点です。バナナという果物を新たに加えるには、工場の種類を変えなければなりません。私たちの後期メンテナンスが増加しました。 ちょっと負担しました 抽象工場モデルはこの欠点を補うことができる。package com.pattern.build.facotry.abs;
import com.pattern.build.facotry.simple.Fruit;
public interface AbstractFactory {
public Fruit crearFruit();
}
package com.pattern.build.facotry.abs;
import com.pattern.build.facotry.simple.Apple;
import com.pattern.build.facotry.simple.Fruit;
public class AppleFactory implements AbstractFactory {
@Override
public Fruit crearFruit() {
return new Apple();
}
}
package com.pattern.build.facotry.abs;
import com.pattern.build.facotry.simple.Fruit;
import com.pattern.build.facotry.simple.Orange;
public class OrangeFactory implements AbstractFactory {
@Override
public Fruit crearFruit() {
return new Orange();
}
}
抽象的な工場モデルのコードを見て、確かに果物を追加するなら、もとの工場類を修正する必要はなく、もう一つの種類を作り直します。でもたくさんあったら 果物なら、多くの工場類が出ます。 つまり、工場の方法モデルと抽象工場のモデルはそれぞれ長所があります。自分の本当の状況に合わせて使うことができます。