工厂是一个类,这个类负责生产很多具有一部分相同属性或者方法的不同的类对象,其实就是一个生产类对象的工厂
简单工厂的优点:
1:简单工厂可以有效地降低客户端和具体对象的耦合,将new具体对象的任务交给了一个简单工厂类
2:可以有效的进行代码复用,如客户端A和客户端B都需要一个具体对象,客户端A和客户端B可以通过同一个简单工厂来获取具体类型的实例
简单工厂的缺点:
一定程度上违背了开闭原则,在新增产品时需要修改简单工厂类
1.abstract的特点
(1).用abstract关键字修饰的函数是抽象函数。
(2).类内含有抽象函数的类叫做抽象类,类需要用abstract修饰
(3).抽象类不能被实例化,所以无法对抽象类进行new
(4).继承自抽象类的子类必须覆盖实现父类中的抽象函数 。
(5).抽象类可以有构造函数,当被继承的时候,子类会用super()调用父类的构造函数
abstract不可以和final一同使用:被final修饰后的类不能出现子类,而abstract的类需要子类来重写方法(不然毫无意义)。
abstract不可以和private一同使用: 当用private修饰抽象函数的时候,子类继承会无法重写父类的抽象方法(private不被子类继承)
//设计一个动物类 动物的叫声
//abstract抽象类——表达概念而无法构造出实体的类,且不能生成对象,通常被继承
public abstract class Animal
{
public abstract void voice();
}
//子类实现接口 人
public class People:Animal
{
public override void voice()
{
print("说话");
}
}
//子类实现接口 猴子
public class Monkey:Animal
{
public override void voice()
{
print("叫吱吱");
}
}
//等一些列动物子类
//动物工厂类
public class AnimalFactory
{
public static Animal GetAnimalInstance(string anitype)
{
Animal ani = null;
if(anitype=="People")
{
ani = new People();
}
elseif (anitype=="Monkey")
{
ani = new Monkey();
}
else
{
}
return ani;
}
}
//调用
MobilePhone animal1 = AnimalFactory.GetAnimalInstance("Monkey");
if(animal1 != null)
animal1.voice();
MobilePhone animal2 = AnimalFactory.GetAnimalInstance("People");
if(animal2 != null)
animal2.voice();
工厂模式可以用在创建怪物类,因为怪物都有攻击播放技能特效声音等,