我正在从网站上阅读设计模式
在那里我读到了有关工厂,工厂方法和抽象工厂的信息,但它们很混乱,我对定义并不清楚.根据定义
Factory - 创建对象而不将实例化逻辑暴露给客户端,并通过公共接口引用新创建的对象.是Factory Method的简化版本
工厂方法 - 定义用于创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象.
抽象工厂 - 提供用于创建相关对象族的界面,而无需明确指定其类.
我还查看了关于抽象工厂与工厂方法的其他stackoverflow线程,但是那里绘制的UML图使我的理解更加糟糕.
有谁能告诉我
java language-agnostic design-patterns factory factory-method
我一直在阅读有关OCP主要内容以及如何使用策略模式来实现这一目标.
我打算尝试向几个人解释这个,但我能想到的唯一例子是根据"订单"的状态使用不同的验证类.
我在线阅读了几篇文章,但这些文章通常没有描述使用该策略的真实原因,如生成报告/账单/验证等...
是否有任何现实世界的例子,您认为策略模式是常见的?
我正在通过设计模式概念学习,并且还希望使用适当的设计模式在我的项目中实现支付模块.所以我为此创建了一些示例代码.
目前我有两个具体的付款实施PayPal和Credit Card.但具体实施将在项目中进一步增加.
付款服务
public interface IPaymentService
{
void MakePayment<T>(T type) where T : class;
}
Run Code Online (Sandbox Code Playgroud)
信用卡和Pay Pal服务
public class CreditCardPayment : IPaymentService
{
public void MakePayment<T>(T type) where T : class
{
var creditCardModel = (CreditCardModel)(object)type;
//Implementation CreditCardPayment
}
}
class PayPalPayment : IPaymentService
{
public void MakePayment<T>(T type) where T : class
{
var payPalModel = (PayPalModel)(object)type;
//Further Implementation will goes here
}
}
Run Code Online (Sandbox Code Playgroud)
客户端代码实现
var obj = GetPaymentOption(payType);
obj.MakePayment<PayPalModel>(payPalModel);
Run Code Online (Sandbox Code Playgroud)
获得付款选项
private static IPaymentService …Run Code Online (Sandbox Code Playgroud) 当我仔细观察策略和工厂设计模式时,其外观几乎相似。我们可以使用任何一种模式来实现解决方案。然后我想知道什么时候使用什么。
我正在用工厂模式编写代码.在switch的情况下,我实际上是返回Class对象.使用这个返回类,我将调用一个方法.这是战略模式的一个例子吗?
using System;
using System.Linq;
namespace ConsoleApplication1
{
public interface IVehicle
{
void Manufacture();
}
public class Car : IVehicle
{
public void Manufacture()
{
Console.WriteLine("Car Manufacturing");
}
}
public class Bike : IVehicle
{
public void Manufacture()
{
Console.WriteLine("Bike Manufacturing");
}
}
public static class factory
{
public static IVehicle GetVehicle(string name)
{
switch(name)
{
case "Car":
return new Car();
case "Bike":
return new Bike();
default:
throw new ArgumentException();
}
}
}
public class program
{
public static void …Run Code Online (Sandbox Code Playgroud)