工厂模式

2、工厂模式

工厂模式专门负责将大量有共同接口的类实例化,工厂模式可以动态决定将哪个类实例化,不必事先知道每次实例化哪个类。

普通工厂模式:类创建型模式,在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,简单工厂模式通过这种做法实现了对责任的分割,他提供了专门的工厂类用于创建对象;客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式减少使用者的记忆力;要通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的产品类,一定程度上提高了系统的灵活度。

适用环境:工厂类负责创建的对象比较少;客户端只知道传入工厂的参数,对于如何创建对象不关心。

2.1简单工厂模式:

public interface Sender{

Public void Send();

}

//具体产品角色

public class MailSender implements Sender{

public void Send(){

System.out.println(“this is mailSender”);

}

}

public class SmsSender implements Sender{

public void Send(){

System.out.println(“this is sms Sender”);

}

}

//工厂类

public class SendFactory{

public Sender produce(String s ){

If(“mail”.equals(s))

return new MailSender();

else if(“sms”.equals(s))

return new SmsSender();

else{

System.our.println(“请输入正确类型”);

return null;

}

}

}

//测试类

public class FactoryTest{

public static void main(Sring[] args){

//获得工厂类

SendFactory factory = new SendFactory();

  //获得接口Sender(接口是抽象类的特例,实现接口相当于一种特殊的继承)

//实例化了接口sender,但是不涉及Sender的具体子类(减小耦合),达到封装效果。

Sender sender = factory.produce(“sms”);

sender.Send();

}

}

 

 

2.2工厂方法模式

public classSendFactory{

public static Sender produceMail(){

return new MailSender();

}

public static Sender produceSms(){

return new SmsSender();

}

}

//测试类

public classFactoryTest{

public static void main(String[] args){

Sender sender= SendFactory.produceMail();

sender.Send();

}

}

 

2.3抽象工厂模式

public interface Sender{

public void Send();

}

//具体产品角色

public class MailSender implements Sender{

public void Send(){

System.out.println(“this is mailSender”);

}

}

public class SmsSender implements Sender{

public void Send(){

System.out.println(“this is sms Sender”);

}

}

public interface Provider{

public Sender produce();

}

 

//每个具体类都有自己的工厂。produce()方法返回具体类的实例。

public classSendMailFactory implements Provider {

public Sender produce(){

return new MailSender();

}

}

public classSendSmsFactory implements Provider{

public Sender produce(){

return new SmsSender();

}

}

 

//测试类

public class Test{

public static void main (String[] args){

Provider provider = new SendMailFactory();

//produce方法返回具体类的实例。Sender为接口(特殊抽象类在此相当于具体实现类的父类)

Sender sender = provider.produce();

sender.Send();

}

}

 

2.4Android中的Factory

比如AsyncTask的抽象工厂实现:

工厂的抽象:

1

2

3

4

public interface ThreadFactory {

//省略为备注

    Thread newThread(Runnable r);

 }

产品的抽象(new Runnable就是其实现类):

1

2

3

4

   public interface Runnable {

//省略为备注

    public abstract void run();

 }

AsyncTask中工厂类的实现:

1

2

3

4

5

6

7

private static final ThreadFactory sThreadFactory = new ThreadFactory() {

 

private final AtomicInteger mCount = new AtomicInteger(1);

 

    public Thread newThread(Runnable r) {

        return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());

    }

};

我们可以创建另外类似的工厂,生产某种专门的线程(多线程),非常容易扩展。
当然,android中的应用还有很多(比如BitmapFactory),有兴趣的小伙伴可以去扒一扒。

 

 


内容概要:本文详细探讨了双馈风力发电机(DFIG)在Simulink环境下的建模方法及其在不同风速条件下的电流与电压波形特征。首先介绍了DFIG的基本原理,即定子直接接入电网,转子通过双向变流器连接电网的特点。接着阐述了Simulink模型的具体搭建步骤,包括风力机模型、传动系统模型、DFIG本体模型和变流器模型的建立。文中强调了变流器控制算法的重要性,特别是在应对风速变化时,通过实时调整转子侧的电压和电流,确保电流和电压波形的良好特性。此外,文章还讨论了模型中的关键技术和挑战,如转子电流环控制策略、低电压穿越性能、直流母线电压脉动等问题,并提供了具体的解决方案和技术细节。最终,通过对故障工况的仿真测试,验证了所建模型的有效性和优越性。 适用人群:从事风力发电研究的技术人员、高校相关专业师生、对电力电子控制系统感兴趣的工程技术人员。 使用场景及目标:适用于希望深入了解DFIG工作原理、掌握Simulink建模技能的研究人员;旨在帮助读者理解DFIG在不同风速条件下的动态响应机制,为优化风力发电系统的控制策略提供理论依据和技术支持。 其他说明:文章不仅提供了详细的理论解释,还附有大量Matlab/Simulink代码片段,便于读者进行实践操作。同时,针对一些常见问题给出了实用的调试技巧,有助于提高仿真的准确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值