シンプルなファクトリパターンとFactory Methodパターン
コアファクトリパターン:分業
シンプルなファクトリパターンは、拡大するソースコードを変更する必要がOCP(オープンクローズPrincinple)の原則を満たしていません
クラスファクトリモードの方法は、一般的に、単純なファクトリパターンであり、コードの複雑さなどの複雑さを増大させます
通常のコード
パブリックインターフェイスカー{
無効実行();
}
パブリッククラスアウディは{車を実装します
@Override
公共ボイドRUN(){
System.out.printlnは( "アウディラン!!!");
}
公共ボイドRUN(){
System.out.printlnは( "アウディラン!!!");
}
}
パブリッククラスBMWは車を{実装します
@Override
公共ボイドRUN(){
System.out.printlnは( "BMWで実行!");
}
公共ボイドRUN(){
System.out.printlnは( "BMWで実行!");
}
}
パブリッククラスDemo01 {
パブリック静的無効メイン(文字列[] args){
車C1 =新しいアウディ()。
カーC2 =新しいBMWの();
c1.run();
c2.run();
パブリック静的無効メイン(文字列[] args){
車C1 =新しいアウディ()。
カーC2 =新しいBMWの();
c1.run();
c2.run();
}
シンプルなファクトリパターン
パブリックインターフェイスカー{
無効実行();
}
パブリッククラスアウディは{車を実装します
@Override
公共ボイドRUN(){
System.out.printlnは( "アウディラン!!!");
}
公共ボイドRUN(){
System.out.printlnは( "アウディラン!!!");
}
}
パブリッククラスBMWは車を{実装します
@Override
公共ボイドRUN(){
System.out.printlnは( "BMWで実行!");
}
公共ボイドRUN(){
System.out.printlnは( "BMWで実行!");
}
}
/ **
*シンプルファクトリパターンが
破壊されたときにコードを変更する必要があります* OCP原則を変更
* @author帆コードノック
*
* /
パブリッククラスCarFactory {
{(String型の)パブリック静的カーgetCarを
IF(type.equals(「アウディ」) ){
新しい新しいアウディを返す();
}){(type.equals( "BMW"はIF他)
)新しいニューBMWを(返す;
}他の{
戻りNULL;
}
}
}
*シンプルファクトリパターンが
破壊されたときにコードを変更する必要があります* OCP原則を変更
* @author帆コードノック
*
* /
パブリッククラスCarFactory {
{(String型の)パブリック静的カーgetCarを
IF(type.equals(「アウディ」) ){
新しい新しいアウディを返す();
}){(type.equals( "BMW"はIF他)
)新しいニューBMWを(返す;
}他の{
戻りNULL;
}
}
}
パブリッククラスDemo02 {
パブリック静的無効メイン(文字列[] args){
車C1 = CarFactory.getCar( "宝马")。
カーC2 = CarFactory.getCar( "奥迪");
c1.run();
c2.run();
パブリック静的無効メイン(文字列[] args){
車C1 = CarFactory.getCar( "宝马")。
カーC2 = CarFactory.getCar( "奥迪");
c1.run();
c2.run();
}
Factory Methodパターン
public interface Car {
void run();
}
void run();
}
public class Bmw implements Car {
@Override
public void run() {
System.out.println("BMW在奔跑!!!");
}
public void run() {
System.out.println("BMW在奔跑!!!");
}
}
public class Audi implements Car{
@Override
public void run() {
System.out.println("奥迪在奔跑!!!");
}
public void run() {
System.out.println("奥迪在奔跑!!!");
}
}
public interface CarFactory {
Car getCar();
}
Car getCar();
}
public class AudiFactory implements CarFactory{
@Override
public Car getCar() {
return new Audi();
}
}
public Car getCar() {
return new Audi();
}
}
public class BmwFactory implements CarFactory{
@Override
public Car getCar() {
return new Bmw();
}
}
@Override
public Car getCar() {
return new Bmw();
}
}
public class Client {
public static void main(String[] args) {
Car c1=new AudiFactory().getCar();
Car c2=new BmwFactory().getCar();
c1.run();
c2.run();
}
public static void main(String[] args) {
Car c1=new AudiFactory().getCar();
Car c2=new BmwFactory().getCar();
c1.run();
c2.run();
}
}