一陈惰、模式的定義與特點
工廠方法(FactoryMethod)模式的定義:定義一個創(chuàng)建產(chǎn)品對象的工廠接口坠非,將產(chǎn)品對象的實際創(chuàng)建工作推遲到具體子類工廠類中
工廠方法模式的主要優(yōu)點
- 調(diào)用方只需要知道具體工廠的名稱,無需知道產(chǎn)品的具體創(chuàng)建過程
- 增加新的產(chǎn)品時只需要添加具體產(chǎn)品類和對應(yīng)的具體工廠類包斑,無需對原工廠進(jìn)行任何修改
二斥杜、模式的結(jié)構(gòu)和實現(xiàn)
工廠方法模式由抽象工廠、具體工廠凯沪、抽象產(chǎn)品和具體產(chǎn)品等4個要素構(gòu)成
模式的實現(xiàn)
package FactoryMethod;
public class AbstractFactoryTest
{
public static void main(String[] args)
{
try
{
Product a;
AbstractFactory af;
af=(AbstractFactory) ReadXML1.getObject();
a=af.newProduct();
a.show();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
//抽象產(chǎn)品:提供了產(chǎn)品的接口
interface Product
{
public void show();
}
//具體產(chǎn)品1:實現(xiàn)抽象產(chǎn)品中的抽象方法
class ConcreteProduct1 implements Product
{
public void show()
{
System.out.println("具體產(chǎn)品1顯示...");
}
}
//具體產(chǎn)品2:實現(xiàn)抽象產(chǎn)品中的抽象方法
class ConcreteProduct2 implements Product
{
public void main()
{
System.out.println("具體產(chǎn)品2顯示...");
}
}
//抽象工廠
interface AbstractFactory
{
public Product newProduct();
}
//具體工廠1:實現(xiàn)了廠品的生成方法
class ConcreteFactory1 implements AbstractFactory
{
public Product newProduct()
{
System.out.println("具體工廠1生成-->具體常品1...");
return new concreteProduct1();
}
}
//具體工廠2:實現(xiàn)了廠品的生成方法
class ConcreteFactory2 implements AbstractFactory
{
public Product newProduct()
{
System.out.println("具體工廠2生成-->具體常品2...");
return new concreteProduct2();
}
}
三第焰、Golang實現(xiàn)工廠方法模式
package factorymethod
type Operator interface{
SetA(int)
SetB(int)
Result() int
}
type OperatorFactory interface {
create() Operator
}
type OperatorBase struct {
a, b int
}
func (o *OperatorBase) SetA(a int) {
o.a = a
}
func(o *OperatorBase) SetB(b int) {
o.b = b
}
type PlusOperatorFactory struct{}
func (PlusOperatorFactory) Creat() Operator {
return &PlusOperator{
OperatorBase: &OperatorBase{},
}
}
type PlusOperator struct {
*OperatorBase
}
func (o PlusOperator) Result() int {
return o.a + o.b
}