今天,我的困境来自于试图理解在如何实现策略和桥模式方面为什么会有重叠。
下面是桥模式(从抽象中抽象实现)
// Shapes object structure will not be concerned how they draw themselves
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
// This could also be put in the subcl
我不明白为什么在策略设计模式中使用上下文模块(我们将在下面的代码中看到),它的功能是什么?让我们看看战略设计模式的一部分。
public interface Strategy {
public int doOperation(int num1, int num2);
}
public class OperationAdd implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
public cla
我今天读到了关于SOLID's Open/Closed Principle的文章,我记得的第一个例子是安卓支持库中的ViewDragHelper类。
下面是这门课的详细内容:
// allowing a user to drag and reposition views
public class ViewDragHelper {
private final Callback mCallback;
public static ViewDragHelper create(..., Callback cb)
public abstract static class
我想在php中使用闭包来实现Stategy模式。使用闭包的主要优点是减少了创建附加类所需的样板和代码量。通常,该模式如下所示:
interface StateDiscountCalculatorInterface
{
public function calculateDiscount($amount);
}
class NewYorkStateStrategy implement StateDiscountCalculatorInterface
{
public function calculateDiscount($amount)
{
// ...
我想要建立一个应用程序的瓶,可以切换之间的对话与一个PostGresql和一个Mongo。据我所知,策略模式是指能够切换由某些方法调用动态引用的算法。因此,我认为这种模式是相关的,因为我想切换出创建、读取、更新、删除等抽象函数。在我看来,战略在这里是相关的,但我不太清楚如何实现它。我是这么想的:
我有这个文件来处理我的路线:
from flask import Blueprint
from .models import Entity
api = Blueprint('api', __name__, url_prefix='/api')
from .models.
我试图理解PHP中的策略模式。我的示例基于本教程:
为了理解,我把它剪了一点:
interface IStrategy
{
public function execute();
}
class PayCash implements IStrategy
{
public function execute()
{
echo "Paying via Cash";
}
}
class Payment
{
private $_strategy; // new PayCash()
public function
给出了典型的策略模式
class Strategy
{
public:
virtual int execute() const = 0;
}
class StrategyA : public Strategy
{
public:
int execute() const override;
}
class StrategyB : public Strategy
{
public:
int execute() const override;
}
我相信实现上下文类的‘pre++11’方式应该是这样的
class ContextRaw
{
public:
Cont
目前,我有一个标准的战略模式实施,简化如下:
public interface IStrategy
{
IList<Dog> GetDogs();
}
public class DogStrategy: IStrategy
{
public IList<Dog> GetDogs()
{
return new List<Dog>();
}
}
我还有一个使用策略的类:
public class DogCollection
{
private IStrategy strategy;
public
我正在尝试实施战略设计模式,并想知道我是否做得对。
比方说,我有类FormBuilder,它使用下面列表中的策略来构建表单:
SimpleFormStrategy
ExtendedFormStrategy
CustomFormStrategy
所以问题是:
在FormBuilder内部选择策略,而不是从外部传递策略是正确的吗?
这不违反开放封闭原则吗?因此,如果我想再添加一个表单策略或者删除一个现有的表单策略,我必须编辑FormBuilder类。
草案代码示例
class Form {
// Form data here
}
interface I
我不知道该怎么称呼这些情况,所以我会说明一下。
如果我有这样的方法:
if (i <= 5)
doSomething();
else
doSomethingElse();
但是我知道,一旦i超过5,它就永远不会小于或等于5,一旦它第一次分支,就没有必要继续检查if-语句。
在这种情况下实现策略模式以避免冗余检查是个好主意吗?
class strategy1 implements strategy {
Object obj; // stores a reference to the object that uses it
void run() {
我是新的设计模式和工作方式的工厂方法和战略模式。我知道工厂是一种创造模式,战略是一种行为模式,但我很难理解何时使用哪一种模式。例如,我有以下类,它们根据指定的公司更新客户端详细信息:
public interface IUpdateDetails { void UpdateDetails(); }
public class UPSUpdateDetails : IUpdateDetails
{
public void UpdateDetails() => Console.WriteLine("Call web service to upd
我特别感兴趣的是实现一个,其中一个(或多个)策略来自第三方库。
我有一个第三方图书馆,有这样一个类:
public class LibraryClass {
public void doSomething() {
// ...
}
}
然后,我用相同的接口创建了自己的类:
public class MyClass {
public void doSomething() {
// ...
}
}
现在,在我的代码中,我想做以下工作:
public class MainActivity extends AppCompatActivit
我有一个类SearchEngine,它可以有不同的行为,因此我需要传递一个搜索策略对象。目前,我在SearchStrategyFactory的SearchEngine中有一个setter方法。
class SearchEngine
{
protected $strategy;
public function setStrategy($type)
{
$this->strategy = app(SearchStrategyFactory::class)->create($type);
}
public function
我正在尝试在Spring项目中使用液化库。我可以用changelog文件更改数据库,但我想用Java代码更改数据库。Liquibase必须看到来自hibernate和液化库的变化,警告我这种变化。这是没有例子的。我该怎么做呢。有什么例子吗?
我在我的项目中创建这样的数据库。当我这样做时(例如,添加列),液化库会看到hibernate文件中的变化,例如给我警告提交或回滚。我怎么能这么做?
@Entity
@Table(name="strategy")
public class Strategy {
@Id
@GeneratedValue(strategy = I
我的数据库中有两个表,它们包含一个超类和一个子类的主数据。然而,在我的应用程序中,我在两者之间有一个中间类,它从底层的子类中加载数据……
abstract public class TierSettings
{
public Guid id { get; set; }
public string SomeTierSetting { get; set; }
}
abstract public class PricingStrategy : TierSettings
{
public string StrategySetting1 { get; set; }
pu
我正在研究如何使用和Javadoc上描述的以下技术:
// Main loop
while (!done) {
// Prepare for rendering the next frame
// ...
// Render single frame
do {
// The following loop ensures that the contents of the drawing buffer
// are consistent in case the underlying surface was recreated
do {
//
我读过“策略对象经常产生良好的轻量级”(来自可重用的面向对象软件的设计模式元素),我想知道这是如何实现的。我在互联网上没有找到任何例子。
下面的代码(C#)是正确的吗?
谢谢!
using System;
using System.Collections.Generic;
namespace StrategyFlyweight
{
class Program
{
static void Main(string[] args)
{
Client client = new Client();
for(