設計模式(一)工廠模式(創建型)

 簡單工廠模式

     一個抽象產品類,可以派生出多個具體產品類;

     一個具體工廠類,可以創建多個具體產品的實例。


       抽象產品類定義

public abstract class Sender {
	
	void send(){
		
	};

}


      具體產品類定義

    郵件產品類

public class MailSender extends Sender{
	
	public void send(){
	  System.out.println("Mail Sender!");	
	}
}

    短信產品類

public class SmsSender extends Sender{
	
	public void send(){
		  System.out.println("Sms Sender!");	
	}

}

   簡單工廠類

public class SimpleFactory {
	
	public static MailSender createMailSender(){
		return new MailSender();
	}
	
	public static SmsSender createSmsSender(){
		return new SmsSender();
	}

}

        測試類

public class SimpleFactoryTest {

	public static void main(String[] args) {
		Sender mailSender = SimpleFactory.createMailSender();
		mailSender.send();
		
		Sender smsSender = SimpleFactory.createSmsSender();
		smsSender.send();
	}

}

     工廠方法模式

         一個抽象產品類,可以派生出多個具體產品類;

         一個抽象工廠類,可以派生出多個具體工廠類;

         每個具體工廠類只能創建一個具體產品類的實例。


         抽象產品類定義

public abstract class Fruit {
	
	void print(){
		
	};

}

       具體產品類定義

public class Apple extends Fruit{
	
	public void print(){
		System.out.println("apple");
	}

}

public class Pear extends Fruit{
	
	public void print(){
		System.out.println("pear");
	}

}

    工廠方法抽象類定義

public abstract class Factory {
	
	abstract Fruit create();

}


    工廠方法具體工廠類定義:
public class AppleFactory extends Factory{
	
	public Fruit create(){
		return new Apple();
	}

}


public class PearFactory extends Factory{
	
	public Fruit create(){
		return new Pear();
	}

}

      測試類
public class MethodFactoryTest {
	
	public static void main(String[] args) {
		Factory appleFactory = new AppleFactory();
		Fruit apple = appleFactory.create();
		apple.print();
		
		Factory pearFactory = new PearFactory();
		Fruit pear = pearFactory.create();
		pear.print();
	}

}

       

     抽象工廠模式

       多個抽象產品類,每個抽象產品類可以派生出多個具體的產品類;

       一個抽象工廠類,可以派生出多個具體工廠類;

       每個具體工廠類可以創建多個具體產品類的實例。


     抽象產品類定義

public abstract class Fruit {
	
	void print(){
		
	};

}


public abstract class Car {

	void print(){
		
	};
	
}


     具體產品類定義
public class Apple extends Fruit{
	
	public void print(){
		System.out.println("apple");
	}

}

public class Pear  extends Fruit{
	
	public void print(){
		System.out.println("pear");
	}

}

public class Bmw extends Car{
	
	public void print(){
		System.out.println("bmw");
	}

}

public class Buick extends Car{
	
	public void print(){
		System.out.println("buick");
	}

}


     抽象工廠抽象類定義
public abstract class AbstractFactory {
	
	abstract Fruit createFruit();
	
	abstract Car createCar();

}

    抽象工廠具體工廠類定義
public class BmwAppleFactory extends AbstractFactory{
	
    public Fruit createFruit(){
    	return new Apple();
    }
	
    public Car createCar(){
    	return new Bmw();
    }

}

public class BuickPearFactory extends AbstractFactory{
	
	public Fruit createFruit(){
    	return new Pear();
    }
	
    public Car createCar(){
    	return new Buick();
    }

}

     測試類
public class AbstractFactoryTest {
	
	public static void main(String[] args) {
		AbstractFactory bmwAppleFactory = new BmwAppleFactory();
		Car car1 = bmwAppleFactory.createCar();
		Fruit fruit1 = bmwAppleFactory.createFruit();
		car1.print();
		fruit1.print();
		
		AbstractFactory buickPearFactory = new BuickPearFactory();
		Car car2 = buickPearFactory.createCar();
		Fruit fruit2 = buickPearFactory.createFruit();
		car2.print();
		fruit2.print();
	}

}

      工廠方法和抽象工廠的區別:

         工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。

         工廠方法模式的具體工廠類只能創建一個具體產品的實例,而抽象工廠模式可以創建多個。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章